﻿/*
字串数 
Time Limit:1000MS  Memory Limit:32768K

  
Description:
一个A和两个B一共可以组成三种字符串："ABB"，"BAB"，"BBA"。
给定若干字母和它们相应的个数，计算一共可以组成多少个不同的字符串。 

Input:
每组测试数据分两行，第一行为n（1≤n≤26），表示不同字母的个数，第二行为n个数A1，A2，……，An（1≤Ai≤12），表示每种字母的个数。
测试数据以n=0为结束。 
Output:
对于每一组测试数据，输出一个m，表示一共有多少种字符串。 
Sample Input:
2
1 2
3
2 2 2
0
Sample Output:
3
90
*/

#include <iostream>
#include <vector>
#include <numeric>

using namespace std;
#define MAX_ELEMS 32

unsigned long cnr(unsigned int n, unsigned int r)
{
	unsigned int i, j;
	int a[MAX_ELEMS]={0};
	
	if(r==0||r>=n)return 1;
	
	if((r<<1)>n)r=n-r;
	
	for (i=0; i<=r; ++i) 
		a[i]=1U;
	for (i=1; i<=n-r; ++i)
		for (j=1; j<=r; ++j)
			a[j]+=a[j-1];
		return a[r];	
}

int main()
{
	for (int n; cin>>n && n;)
	{
		
		vector<int> v;
		v.reserve(n);

		for (int num;n-- && cin>>num;v.push_back(num));
		
		int a = accumulate(v.begin(), v.end(), 0);
		long product=1L;
		for (int i=0, size=v.size(); i<size; ++i)
		{
			product*=cnr(a, v[i]);
			a-=v[i];
		}
		cout<<product<<endl;		
	}

	return 0;
}